﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using CapaDeDatos;
using CapaDeDatos.EF;
using CapaDeDominio;

namespace CapaDePrueba
{
    [TestFixture]
    public class TestUsuarioDAO
    {
        private IUsuarioDAO usuarioDAO = null; // Clase DAO que se va a probar
        private int codigoGenerado = 0; // Código de Local que se genera en Crear() y se utiliza para el resto de pruebas

        [TestFixtureSetUp]
        public void PrepararPruebas() 
        {
            usuarioDAO = new CapaDeDatos.EF.UsuarioDAO();
            usuarioDAO.Crear(new Usuario() { 
                User = "u820823", 
                Clave = "clave123", 
                EsAdministrador=true 
                });
        }
        [Test]
        public void Test1_Crear()
        {
            Assert.IsNotNull(usuarioDAO);

            Usuario usuarioACrear = new Usuario();
            usuarioACrear.User = "usuario";
            usuarioACrear.Clave = "clave";
            usuarioACrear.EsAdministrador = false;
            // 3. Declaramos la entidad que contendrá el resultado
            Usuario usuarioCreado = null;
            // 4. Probamos que no ocurra error al ejecutar el método
            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                usuarioCreado = usuarioDAO.Crear(usuarioACrear);
                codigoGenerado = usuarioCreado.Codigo;
            }, "usuario creado");
            // Probamos que la entidad resultante no sea nula
            Assert.IsNotNull(usuarioCreado);
            // Probamos que el código generado sea mayor a 0
            Assert.Greater(usuarioCreado.Codigo, 0);
            // Probamos que los nombres registrado es igual al solicitado con la entidad
        }
        [Test]
        public void Test2_Obtener()
        {
            // 1. Clase a probar: LocalDAO
            Assert.IsNotNull(usuarioDAO);
            // 2. Definimos los datos para la prueba
            int codigo = codigoGenerado;
            // 3. Declaramos la entidad que contendrá el resultado
            Usuario usuarioObtenido = null;
            // 4. Probamos que no ocurra error al ejecutar el método
            Assert.DoesNotThrow(delegate
            {
                // 5. Ejecutamos el método a probar
                usuarioObtenido = usuarioDAO.Obtener(codigo);
            });
            // Probamos que la entidad resultante no sea nula
            Assert.IsNotNull(usuarioObtenido);
            Assert.AreEqual(usuarioObtenido.Codigo, codigo);
        }        
    }
}
